/**
 * Represents a union of no value and some value.
 **/
public interface Choice<T> {

  /**
   * determines if this choice is something
   * @return boolean is this a something?
   **/
  public boolean isSomething();

  /**
   * returns the value enclosed in this something
   * @return T whatever this something contains
   **/
  public T getValue();
}
